היום PHP היא אחת משפות התכנות הכי מתפתחות בעולם. גרסה חדשה עם תיקונים ושיפורים יוצאת כמעט כל חודש והמצב הזה נמשך למעלה משנה. רק אתמול יצאה גרסה חדשה עם מספר מזל 5.5.5 אבל זה לא הדבר היחידי שקרה בעולם ה-PHP בחודשים האחרונים. בהמשך הכתבה אספר על עוד כמה דברים מעניינים שהיו פה בזמן האחרון וכמה דברים שיחכו לך ב PHP 5.6 וגם איזה מתנה תחכה לך באתר שבוע הבא:
רק בשנה האחרונה יותר מתכנתים חדשים התחילו לתכנת ב-PHP מאשר ישנם מתכנתי javascript
ביוני האחרון פורסם אינדקס טיאובי, אינדקס פופולריות שפות תכנות. לפיו, PHP נמצאת היום במקום החמישי מבחינת פופוליות עם 6 אחוזים מכלל המתכנתים בעולם.קצת עוקפים אותה c, c++, java, objective-c. אלו הם מספרים לא רעים, באיחוד לאור העובדה שלפי הערכות שונות, 75% מכלל האתרים באינטרנט מופעלים על ידי PHP.
יש כאלה שאומרים שכל זה בזכות הרבה מאוד פריימוורקים שונים שיוצאים מדי פעם. יכול שזה נכון בגלל ש-
בחודשיים האחרונים יצאה גרסה חדשה כמעט לכל פריימוורק
[*] phalcon 1.2(.4) — הפריימוורק הכי הכי מהיר שקיים היום וכתוב לא ב PHP אלה ב C
[*] code igniter 2.1.4 — שזכה להיות הרליז האחרון שמתוחזק על ידי eliaslab. עכשיו codeigniter מחפשת בית חדש וחברה חדשה שתעמוד מאחוריה ותמשיך לפתח אותו.
[*] symfony 2.3 LTS & 2.4 beta — שמבטיחה לתמוך בקוד שלך, להוציא עדכונים וחידושים לפחות למשך שלוש שנים
[*] yii 1.1.14 & 2alpha — שמנסים לעשות את הפריימוורק הכי קל ופשוט למתחילים
[*] Laravel 4.0.8 — שבינתיים מתקן ומשפר באגים קטנים בפריימוורק שעובד יופי גם כך
[*] wordpress 3.6 — שלמרות שאינו פריימוורק, בכל זאת הרבה מאוד חיכו לו והוא בא
חוץ מפריימוורקים, גם השפה עצמה מתחדשת במהירות.
חברה שווייצרית SmugMug.inc החליטה להעסיק מפתח שיעבוד משרה מלאה על פיתוח שפת PHP, תיקון באגים ושיפורים בשפה עצמה. ולא רק שכמות הבאגים הפתוחים ב-bugs.php.net התחילה להצטמצם בצורה מטורפת, אלה גם תזרים חדש של רעיונות והצעות הציף את הגרסה הבאה של php. מאוד יכול להיות שב-php5.6 יחכו לנו כמה מהדברים הבאים:
variadic variables
כמות אין-סופית של משתנים תהפוך אוטומטית למערך..
function fn($reqParam, $optParam = null, ...$params) {
var_dump($reqParam, $optParam, $params);
}
fn(1); // 1, null, []
fn(1, 2); // 1, 2, []
fn(1, 2, 3); // 1, 2, [3]
fn(1, 2, 3, 4); // 1, 2, [3, 4]
fn(1, 2, 3, 4, 5); // 1, 2, [3, 4, 5]
var_dump($reqParam, $optParam, $params);
}
fn(1); // 1, null, []
fn(1, 2); // 1, 2, []
fn(1, 2, 3); // 1, 2, [3]
fn(1, 2, 3, 4); // 1, 2, [3, 4]
fn(1, 2, 3, 4, 5); // 1, 2, [3, 4, 5]
Argument unpacking
המשך להצעה הקודמת, שתאפשר לא רק להעביר כמות אין-סופית של פרמטרים שיהפכו למערך, אלה גם כל iterator ש"ייפתח" ויהפוך למערך גם הוא.
function test(...$args) { var_dump($args); }
test(1, 2, 3); // [1, 2, 3]
test(...[1, 2, 3]); // [1, 2, 3]
test(...new ArrayIterator([1, 2, 3])); // [1, 2, 3]
test(1, 2, 3); // [1, 2, 3]
test(...[1, 2, 3]); // [1, 2, 3]
test(...new ArrayIterator([1, 2, 3])); // [1, 2, 3]
Named Parameters
נמאס לנחש מה כל פרמטר אומר בקריאה לפונקציה או רוצה לדלג על פרמטרים אופציונליים? named parameters יאפשר לך להציב ערכים בארגומנטים ספציפיים של פונקציה, תוך כדי שינוי סדר, דילוג על מה שתרצה ואולי גם קוד ברור יותר:
array_fill(start_index => 0, num => 100, value => 42);
לא רק שכל ערך מקבל שם, אלה גם אפשר לדלג על ערכים אופציונליים ולשנות את הסדר איך שתרצה.
Extended keyword support
אם עד עכשיו לא יכולת לקרוא למחלקה "switch" או לקבוע "break' כי הן מילים שמורות, ההצעה לשנות דברים ב-5.6 תפתור לך את הבעיה.
class Switch {
const CONTINUE = 100;
public function or (...) { .. }
}
const CONTINUE = 100;
public function or (...) { .. }
}
Anonymous Classes
אחרי פונקציות אנונימיות — גם מחלקות אנונימיות. למה? — לא יודע! איך? ככה:
public function a()
{
return new class /*implements ISomeInterface*/ // Can extend or implement
{
public function blabla();
}
(); // call the constructor of the anonymous class
}
{
return new class /*implements ISomeInterface*/ // Can extend or implement
{
public function blabla();
}
(); // call the constructor of the anonymous class
}
Nested Classes
אחלה רעיון, להחביא מחלקות בתוך מחלקות אחרות, אם הם לא משמשות אף אחד אחר בשום צורה. דבר נוח שלוקח את שורשיו משפות אחרות ויכול למצוא את השימוש שלו ב-PHP:
class List
{
private class Node { .. }
}
{
private class Node { .. }
}
בונוסים מהקהילה
פעילות אקטיבית קוראת לא רק אצל מפתחי השפה אלה גם בקהילה הישראלית. פרויקט חדש, ספר PHP פתוח שנכתב על ידי הקהילה יצא לדרך. למרות שהספר בכלל כתוב ב javascript ולא כל כך עובד ב-windows בינתיים — אתה בכל זאת מוזמן לעזור למאות אנשים ללמוד PHP - בוא לעזור בכתיבת ספר PHP פתוח למתחילים.
ספר אחר נוסף שנמצא בתהליך כתיבה הוא הספר שלא רק יסביר תכנות מונחה עצמים מאפס, אלה גם יסביר איך להימנע משגיאות נפוצות וילמד לכתוב קוד בצורה מודולרית. לחץ על הקישור כדי לקרוא עוד ולהירשם לעדכונים לגבי הספר הכי ברור על תכנות מונחה עצמים ב-PHP מאפס.
ספר מתנה
בינתיים, לאחד מגולשי האתר שכבר למדו OOP אני הולך לתת מתנה שבוע הבא העתק דיגיטלי אחד של הספר של שני מפתחים, כותבים ומרצים מהקהילה הישראלית, אליהו אור ויהודה צדיק על פיתוח mvc עם code igniter, ככה שאני ממליץ לך לבדוק שבוע הבא את תיבת הדואר שלך או האתר אם אתה עדיין לא רשום לעדכוני מייל.
אל תפספס עדכונים, תכנים חדשים עם הסברים, טיפים וטריקים מעולם ה-PHP. תישאר מעודכן, הירשם עכשיו לרשימת התפוצה ואחת לשבוע תישאר מעודכן בידע חדש.
תגובות לכתבה:
סוף סוף באמת מרגישים התקדמות אמיתית בPHP, אולי העדכון גרסה הכי חשוב מאז הוספת הOOP.
nested classes מחלקות אנונימיות זה כבר משהו שמתבקש שמכל שפת OOP מודרנית.
הדבר היחיד שחבל זה שעד שיוסיפו את כל הדברים האלה יעברו שנה שנתיים. ובעולם הזה זה המון המון זמן.
כמה זמן נצטרך לחכות לתמיכה מובנה ב-Unicode?
http://www.sitepoint.com/bringing-unicode-to-php-with-portable-utf8/
Anonymous Classes זה אחלה פתרון ל nullObject..
דרך אגב האתר שמדרג את הפעילות של כל שפה עושה את זה מניתוח של תוצאות של דיונים על כל שפה שהוא מוצא באינטרנט. זה ממש לא אומר כלום.
התקדמות התקדמות ושוב התקדמות. תודה אלכס.
נראה מדהים, PHP מתקדמת בצעדי ענק :)
לגבי הטבלה, איך objective-c תפס את המקום השלישי ?!
@nirbe זאת השפה היחידה שאפשר לפתח איתה אפליקציות ל iOS ..
הטבלה לא משקפת, מבוססת על נתונים לא משקפים.
@liorel100
זה פעם שניה שאתה אומר את זה וזה פעם שניה שכנראה רק אתה חושב ככה.
כמות הפעילות ברשת, דיונים שאלות וכמויות החיפוש נמצאות ביחס ישיר לכמות האנשים שמתעסקים בזה. אתה צודק שזה לא יחס 1 ל1 עם דיוק של מאה אחוז, אבל בהחלט נותן תמונת מצב אקטואלית בקשר להיקף הפופולאריות.
תודה אלכס,
האם בספר שלך תתיחס ל PHP5.6 ?
כן, העדכן אותו ברגע שיהיה משהו מעניין לגבי 5.6 שקשור לתכנות מונחה עצמים.